package TpFinal;

import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import TpFinal.Interseccion.Direccion;

public class Calle {
	
	private List<Celda> entrada = new ArrayList<Celda>();
	private List<Celda> salida = new ArrayList<Celda>();
	private String nombre;
	private Direccion direccion;
	
	public Calle(String nombre, Direccion direccion){
		this.nombre = nombre;
		this.entrada = this.obtenerCeldas();
		this.salida = this.obtenerCeldas();		
		this.direccion = direccion;
	}

	/**
	 * Crea las celdas para la entrada o la salida
	 * @return List<Celda>
	 */
	private List<Celda> obtenerCeldas() {
		List<Celda> celdas = new ArrayList<Celda>();
		for(int i= 0 ; i<6 ; i++ ){
			celdas.add(new Celda(i,this.getNombre()));
		}
		return celdas;
	}
	
	/**
	 * completa el camino poniendo en la cola las celdas que
	 * posee como entrada
	 * @param camino
	 */
	public void indicarCaminoEntrada(Queue<Celda> camino) {
		int aux = this.getEntrada().size();
		for(int i = 1; i < aux ; i++){
			camino.add(this.getEntrada().get(i));
		}
	}
	
	/**
	 * completa el camino poniendo en la cola las celdas
	 * que posee como salida
	 * @param camino
	 */
	public void indicarCaminoSalida(Queue<Celda> camino) {
		int aux = this.getSalida().size();
		for(int i = 0; i < aux ; i++){
			camino.add(this.getSalida().get(i));
		}
	}
	
	
	//Setters & Getters
	
	public List<Celda> getEntrada() {
		return entrada;
	}
	public Direccion getDireccion() {
		return direccion;
	}
	public void setDireccion(Direccion direccion) {
		this.direccion = direccion;
	}
	public void setEntrada(List<Celda> entrada) {
		this.entrada = entrada;
	}
	public List<Celda> getSalida() {
		return salida;
	}
	public void setSalida(List<Celda> salida) {
		this.salida = salida;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Celda IniciarRecorrido(Auto auto) {
		this.getEntrada().get(0).posicionarse(auto);
		return this.getEntrada().get(0);
	}

}
